/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.upc.dew.serviciosmultiples.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import pe.edu.upc.dew.serviciosmultiples.exception.ServiceException;
import pe.edu.upc.dew.serviciosmultiples.model.Solicitud;
import pe.edu.upc.dew.serviciosmultiples.model.Tecnico;
import pe.edu.upc.dew.serviciosmultiples.model.Usuario;
import pe.edu.upc.dew.serviciosmultiples.service.SolicitudService;
import static pe.edu.upc.dew.serviciosmultiples.util.CalendarFormater.obtenerFechaActualSqlDate;
import static pe.edu.upc.dew.serviciosmultiples.util.Constants.ESTADO_ACEPTADO;
import static pe.edu.upc.dew.serviciosmultiples.util.Constants.SOLICITUD_ACT;
import static pe.edu.upc.dew.serviciosmultiples.util.Constants.USUARIO_ACT;
import static pe.edu.upc.dew.serviciosmultiples.util.Constants.FECHA_ACT;

/**
 *
 * @author bcano
 */
public class SolicitudAdminActController extends MultiActionController {
    protected final Log logger = LogFactory.getLog(getClass());

    private SolicitudService solicitudService;

    public SolicitudService getSolicitudService() {
        return solicitudService;
    }

    public void setSolicitudService(SolicitudService solicitudService) {
        this.solicitudService = solicitudService;
    }

    public ModelAndView index(HttpServletRequest request, HttpServletResponse response, Solicitud solicitudForm) throws ServiceException {
        HttpSession session = request.getSession();
        //System.out.print("llego  index inicio");
        logger.info("llego  index inicio");
        //System.out.print(request.getAttribute("solicitud"));
        logger.info("solicitud");

        try {
            solicitudForm = (Solicitud) session.getAttribute(SOLICITUD_ACT);

        } catch (Exception ex) {
            //System.err.println(ex.toString());
            logger.error(ex.toString());
        }

        request.setAttribute("solicitud", solicitudForm);
        request.setAttribute("usuario", session.getAttribute(USUARIO_ACT));
        request.setAttribute("now", session.getAttribute(FECHA_ACT));
        return new ModelAndView("solicitudAct");
    }

    public ModelAndView indexAct(HttpServletRequest request, HttpServletResponse response, Solicitud solicitudForm) throws ServiceException {
        HttpSession session = request.getSession();
        try {
            String idSolicitud = request.getParameter("codigo");
            //System.out.println("entro indexInsertar id: " + idSolicitud);
            logger.info("entro indexInsertar id: " + idSolicitud);
            solicitudForm = solicitudService.obtenerSolicitud(idSolicitud);
            session.setAttribute(SOLICITUD_ACT, solicitudForm);

        } catch (ServiceException ex) {
            //System.err.println(ex.toString());
            logger.error(ex.toString());
        } catch (Exception ex) {
            //System.err.println(ex.toString());
            logger.error(ex.toString());
        }

        request.setAttribute("solicitud", solicitudForm);
        request.setAttribute("usuario", session.getAttribute(USUARIO_ACT));
        request.setAttribute("now", session.getAttribute(FECHA_ACT));
        return new ModelAndView("solicitudAct");
    }

    public ModelAndView actualizar(HttpServletRequest request, HttpServletResponse response, Solicitud solicitudForm) {
        //System.out.println("entro actualizar: ");
        logger.info("entro actualizar: ");
        HttpSession session = request.getSession();
        Usuario voUsuario = (Usuario) session.getAttribute(USUARIO_ACT);
        try {

            solicitudForm = (Solicitud) session.getAttribute(SOLICITUD_ACT);
            solicitudForm.setEstado(ESTADO_ACEPTADO);
            solicitudForm.setUsuModificaion(voUsuario.getUserName());
            solicitudForm.setFechaModificaion(obtenerFechaActualSqlDate());
            //System.out.println("entro actualizar tecnico: " + solicitudForm.getTecnico().getIdTecnico());
            logger.info("entro actualizar tecnico: " + solicitudForm.getTecnico().getIdTecnico());

            boolean validaUpdate = solicitudService.validarTecnicoDisponible(solicitudForm);
            if (!validaUpdate) {
                solicitudService.actualizarSolicitud(solicitudForm);
                session.removeAttribute(SOLICITUD_ACT);

                request.setAttribute("solicitud", solicitudForm);
                return new ModelAndView("redirect:/solicitudAdmin.htm");
            }
            String mensageError = "Tecnico ya esta asignado a otro solicitud";
            request.setAttribute("mensaje", mensageError);

        } catch (ServiceException ex) {
            //System.err.println(ex.toString());
            logger.error(ex.toString());
        } catch (Exception ex) {
            //System.err.println(ex.toString());
            logger.error(ex.toString());
        }

        request.setAttribute("solicitud", solicitudForm);
        return new ModelAndView("solicitudAct");
    }
}
